//给定n个连续的数字，但是输入时顺序已打乱，然后输入一个k，
//从n个连续的数字选取k个数字，使得这k个数字可以重新排序成连续数字
//然后对这k个数字，用位于n中下标最大的减去最小的，输出这个的最小值

//题目：本身就是我们要求从n中选取k个等差数据，用原n中下标最大的减去下标最小的那个即可

//样例输入1：
//4 2
//2 3 1 4

//示例输出 1
//复制
//1
//好的索引序列是 。例如，是一个很好的索引序列，因为 和 是两个连续整数的重新排列。
//(1, 2), (1, 3), (2, 4)​在这些良好的索引序列中，最小的值是 for ，即 。iK−i1(1, 2)2−1 = 1


//示例输入 2
//4 1
//2 3 1 4
//示例输出 2
//0

//示例输入 3
//10 5
//10 1 6 8 7 2 5 9 3 4
//示例输出 3
//5

#include <iostream>
#include <algorithm>
#include <set>
using namespace std;

const  int N = 2e5 + 10;
int a[N];

void solve()
{
	int n, k;
	cin >> n >> k;

	for (int i = 1; i <= n; i++)
	{
		int x;
		cin >> x;
		a[x] = i; //下标数组
	}
	int ans = 2e5 + 10, res;
	set<int> st;
	for (int i = 1; i < k; i++) //找出k个数中排在最前后的下标
	{
		st.insert(a[i]);//插入k个元素，并且排序他们的下标
	}

	for (int i = k; i <= n; i++)
	{
		st.insert(a[i]);
		res = *st.rbegin() - *st.begin();
		//cout << *st.rbegin() << " " << *st.begin() << endl;
		ans = min(ans, res);
		st.erase(a[i - k + 1]);
	}
	cout << ans << endl;
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);

	solve();

	return 0;
}